// PROGRAMA : CTLPA004 OPCAO: 'BIC'
// SISTEMA : SISP - MODULO DE CONTROLE
// CLIENTE : SEGUP
// PROGRAMADOR : EDU/FM DATA: 03/06/94
// OBJETIVO : ATUALIZAR BAIXA DE DOCUMENTOS CANCELADOS
// __________________________________________________________________
// ATUALIZACOES
// __________________________________________________________________
// RESPONSAVEL DATA
// SOLON MIRANDA 21/10/1999
// OBJETIVO: ALTERACAO DA TELA E DATAS (N6) PARA (N8)

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Ctlta004;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Sistha02;
import br.com.vti.sisp_sicrim.antigo.model.Estla001;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Ctlpa004 OBJETIVO : ATUALIZAR BAIXA DE DOCUMENTOS CANCELADOS *
 * 
 * @author Incode - Data: mai/2014
 * 
 */

@Resource
@Path("/antigo/ctlpa004")
public class Ctlpa004 {
	// Estado Anterior
	Ctlpa004 ctlpa004Anterior;
	// Views utilizadas
	SicControle vwDvecon = new SicControle();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Ctlta004 ctlta004;
	Sistha02 sistha02;
	// Includes utilizados
	Estla001 estla001 = new Estla001();
	// Areas globais / session
	Sisgsisp sisgsisp; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	// private String chave;
	// private long ndemid;
	// private long nnum;
	// private String confsn;
	// private String nomeClasse = this.getClass().getSimpleName();
	// private int dataCorrente;
	private String faseproc = "0"; // _____________________________________________________________________

	private Ctlta004 preMapas() {
		ctlta004 = new Ctlta004(true, sessao);
		sistha02 = new Sistha02(true, sessao);
		ctlta004.setDataCorrente(UtilBean.inverteDataCorrente());
		ctlta004.setNomeClasse(this.getClass().getSimpleName().toUpperCase());
		estla001.qde = 1;
		estla001.esttip = 99;
		return ctlta004;
	}

	public Ctlpa004(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Ctlta004 ctlta004, Sistha02 sistha02) {
		try {
			main(ctlta004, sistha02);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Ctlta004 pctlta004, Sistha02 psistha02) {
		if (pctlta004 == null && psistha02 == null) {
			primeiraVez = true;
			// ctlta004 = new Ctlta004 (primeiraVez);
			ctlta004 = preMapas();
			ctlta004.setNavegar("../ctlpa004/executar");
			result.include("ctlta004", ctlta004);
			ctlta004.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			sessao.setAtributo("CTLPA004", this);
			return;
		} else {
			restaurarEstados(pctlta004, psistha02);
		}

		switch (faseproc) {
		case "0": {
			ctlta004.receberTela(false, result);
			if (!ctlta004.getOperacao().equals("BIC")) {
				saida();
				return;
			}
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
				sessao.setAtributo("CTLPA004", this);
				result.include("ctlta004", ctlta004);
				ctlta004.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			if (!UtilBean.funcao.equals(UtilBean.ctt_confirma)) {
				ctlta004.enviarMensagem(null, "TECLE PF5 P/ATUALIZAR");
				sessao.setAtributo("CTLPA004", this);
				result.include("ctlta004", ctlta004);
				ctlta004.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			funcoes.tabsatu(sessao);
			if (!funcoes.camret.equals("")) {
				ctlta004.enviarMensagem(funcoes.camret, "");
				// sessao.setAtributo ("Ctlpa004", this);
				result.include("ctlta004", ctlta004);
				ctlta004.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			vwDvecon.consultaNumeroDocumento(ctlta004.getNdemid());

			if (vwDvecon.totalRegistros() == 0) {
				ctlta004.enviarMensagem(null, "BAIXA PARA DOC. INEXISTENTE");
				sessao.setAtributo("CTLPA004", this);
				result.include("ctlta004", ctlta004);
				ctlta004.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			faseproc = "1";
			sessao.setAtributo("CTLPA004", this);
			result.include("sistha02", sistha02);
			sistha02.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
			return;
		}
		case "1": {
			sistha02.receberTela(false, result);
			this.ctlta004.setMensagemSaida(UtilBean.concatena("BAIXA EFETUADA OK.", ctlta004.getNdemid()));
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
				this.ctlta004.setMensagemSaida("BAIXA NAO FOI EXECUTADA");
				break;
			}

			vwDvecon.consultaNumeroDocumento(ctlta004.getNdemid());
			vwDvecon.setNumeroDocumento(ctlta004.getNnum());
			if (this.ctlta004.getConfsn().equals("S")) {
				vwDvecon.atualiza();
				// //dao.commit();
			}
			vwDvecon.fecha();
			faseproc = "0";
			break;
		}
		}

		sessao.setAtributo("CTLPA004", this);
		result.include("ctlta004", ctlta004);
		ctlta004.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	}

	// IF *PF-KEY NE 'PF3'
	// IF VAR = 2
	// CPO := 4
	// ELSE
	// IF VAR = 3
	// CPO := 2
	// END-IF
	// END-IF
	// END-IF
	// CALLNAT 'ESTNA000' CPOS MATRIC VLT

	private void saida() {
		funcoes.sissm001(result, sessao);
	}

	private void restaurarEstados(Ctlta004 pctlta004, Sistha02 psistha02) {
		this.ctlpa004Anterior = (Ctlpa004) sessao.getAtributo("CTLPA004");
		if (pctlta004 != null) {
			ctlta004 = pctlta004;
		} else {
			ctlta004 = this.ctlpa004Anterior.ctlta004;
		}
		ctlta004.setSessao(sessao);
		if (psistha02 != null) {
			sistha02 = psistha02;
		} else {
			sistha02 = this.ctlpa004Anterior.sistha02;
		}
		sistha02.setSessao(sessao);
		this.faseproc = this.ctlpa004Anterior.faseproc;
	}
}
